package com.sheng.leetcode.year2023.month03.day09;

import org.junit.Test;

/**
 * @author liusheng
 * @date 2023/03/09
 * <p>
 * 2379. 得到 K 个黑块的最少涂色次数<p>
 * <p>
 * 给你一个长度为 n 下标从 0 开始的字符串 blocks ，blocks[i] 要么是 'W' 要么是 'B' ，<p>
 * 表示第 i 块的颜色。字符 'W' 和 'B' 分别表示白色和黑色。<p>
 * 给你一个整数 k ，表示想要 连续 黑色块的数目。<p>
 * 每一次操作中，你可以选择一个白色块将它 涂成 黑色块。<p>
 * 请你返回至少出现 一次 连续 k 个黑色块的 最少 操作次数。<p>
 * <p>
 * 示例 1：<p>
 * 输入：blocks = "WBBWWBBWBW", k = 7<p>
 * 输出：3<p>
 * 解释：<p>
 * 一种得到 7 个连续黑色块的方法是把第 0 ，3 和 4 个块涂成黑色。<p>
 * 得到 blocks = "BBBBBBBWBW" 。<p>
 * 可以证明无法用少于 3 次操作得到 7 个连续的黑块。<p>
 * 所以我们返回 3 。<p>
 * <p>
 * 示例 2：<p>
 * 输入：blocks = "WBWBBBW", k = 2<p>
 * 输出：0<p>
 * 解释：<p>
 * 不需要任何操作，因为已经有 2 个连续的黑块。<p>
 * 所以我们返回 0 。<p>
 * <p>
 * 提示：<p>
 * n == blocks.length<p>
 * 1 <= n <= 100<p>
 * blocks[i] 要么是 'W' ，要么是 'B' 。<p>
 * 1 <= k <= n<p>
 * <p>
 * 来源：力扣（LeetCode）<p>
 * 链接：<a href="https://leetcode.cn/problems/minimum-recolors-to-get-k-consecutive-black-blocks">2379. 得到 K 个黑块的最少涂色次数</a><p>
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。<p>
 */
public class LeetCode2379 {

    @Test
    public void test01() {
//        String blocks = "WBBWWBBWBW";
//        int k = 7;
        String blocks = "WBWBBBW";
        int k = 2;
        System.out.println(new Solution().minimumRecolors(blocks, k));
    }
}

class Solution {
    public int minimumRecolors(String blocks, int k) {
        int n = blocks.length();
        int min;
        int num = 0;
        for (int i = 0; i < k; i++) {
            if (blocks.charAt(i) == 'W') {
                num++;
            }
        }
        min = num;
        for (int i = k, j = 0; i < n; i++, j++) {
            if (blocks.charAt(i) == 'W') {
                num++;
            }
            if (blocks.charAt(j) == 'W') {
                num--;
            }
            min = Math.min(min, num);
        }
        return min;
    }
}
